This relates to integrated circuits and more particularly, to programmable integrated circuits.
Programmable integrated circuits are a type of integrated circuit that can be programmed by a user to implement a desired custom logic function. In a typical scenario, a logic designer uses computer-aided design (CAD) tools to design a custom logic circuit. When the design process is complete, the computer-aided design tools generate configuration data. The configuration data is loaded into memory elements to configure the devices to perform the functions of the custom logic circuit.
A programmable integrated circuit typically includes programmable logic circuitry organized into a plurality of logic blocks. Each logic block consists of smaller logic elements that are coupled to memory elements. In particular, a logic block includes two different types of memory elements: (1) a first type of random-access memory element that is only used to store configuration data and is therefore referred to as configuration random-access memory (CRAM) memory cells and (2) a second type of random-access memory element that is operable to store either configuration data or user data and is commonly referred to as lookup table random-access memory (LUTRAM) cells.
A conventional logic block includes two LUTRAM columns and two CRAM columns. As an example, the two LUTRAM columns may include 400 LUTRAM cells per column or a combined total of 800 LUTRAM cells, whereas the two CRAM columns may include 450 CRAM cells per column or a combined total to 900 CRAM cells. In certain scenarios, only 600 out of the 800 LUTRAM cells are being utilized while only 500 out of the 900 CRAM cells are being utilized. In other words, 200 LUTRAM cells and 400 CRAM cells are completely unused, which is expensive due to the wasted die area and leakage power consumed by the unused memory cells.
It is within this context that the embodiments described herein arise.